<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;
use App\Http\Controllers\TestResponseController;
use App\Http\Controllers\TestBladeController;
use App\Http\Controllers\ProductController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 一、基本路由
Route::get('/hello',function (){
    return "hello World!";
})->middleware('userlogin');

// 二、路由调用指定控制器
Route::get('/test/{id}',[TestController::class,'index'])->middleware('userLogin');

// 四、匹配请求方式
Route::any('/helloMatch',function (){
    return "hello Match!";
});

// 五、重定向路由
//Route::redirect('/hello','/helloMatch',301);

// 六、视图路由
Route::view('/welcome','welcome',['name'=>'jack']);

// 七、路由参数
Route::get('/getUser/{name?}/order/{id}',function ($name='jack',$id){
    return "hello ".$name." - orderId:".$id;
});

// 八、正则表达式约束
//Route::get('/userName/{name}', function ($name) {
//    //限制用户名只能为大小写字母
//    return "用户名为：".$name;
//})->where('name', '[A-Za-z]+');
//
//Route::get('/userId/{id}', function ($id) {
//    //限制用户ID只能为数字
//    return "用户ID为：".$id;
//})->where('id', '[0-9]+');
//
//Route::get('/userIdName/{id}/{name}', function ($id, $name) {
//    //同时限制用户名和ID
//    return "用户ID为：".$id.", 用户名为：".$name;
//})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

// 九、用帮助方法代替正则表达式
Route::get('/userIdName/{id}/{name}', function ($id, $name) {
    //限制ID为数字，用户名为字母
    return "用户ID为：".$id.", 用户名为：".$name;
})->whereNumber('id')->whereAlpha('name');

Route::get('/userName/{name}', function ($name) {
    //限制用户名只能为大小写字母
//    return route('nickName');
    return redirect()->route('nickName');

})->whereAlphaNumeric('name');

// 十、命名路由
Route::get('/user/nickName', function () {
    return "我是一个命名为nickName的路由";
})->name('nickName');

// 十一、路由分组
//Route::controller(testController::class)->group(function () {
//    Route::get('/test', 'index');
//    Route::get('/order', 'order');
//});

// 十二、路由前缀
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        return "我是/admin/users";
    });
    Route::get('/orders', function () {
        return "我是/admin/orders";
    });
});

Route::resource('users',\App\Http\Controllers\UserController::class);

// 路由缓存
/*
 * 在将应用程序部署到生产环境时，你应该利用 Laravel 的路由缓存。
 * 使用路由缓存将大大减少注册所有应用程序路由所需的时间。要生成路由缓存，
 * 请执行 route:cache Artisan 命令：

    php artisan route:cache
    运行此命令后，你的缓存路由文件将在每个请求上加载。请记住，如果你添加任何新路线，你将需要生成新的路线缓存。因此，你应该只在项目部署期间运行 route:cache 命令。

    你可以使用 route:clear 命令清除路由缓存：

    php artisan route:clear
 */

/**
 * 10-3 请求Request（下）
 */
Route::any('/test/upFile', [TestController::class, 'upFile']);

/**
 * 10-4 响应Response
 */
Route::get('/testResponse',[TestResponseController::class,'testResponse']);
Route::get('/testDownload',[TestResponseController::class,'testDownFile']);
Route::get('/testStream',[TestResponseController::class,'testStream']);
Route::get('/testFile',[TestResponseController::class,'testFile']);

/**
 * 11-1 Laravel的视图
 */
Route::get('/testBlade',[TestBladeController::class,'bladeLayout']);

/**
 * 11-2 Blade模板
 */
Route::get('/testLayout',[TestBladeController::class,'bladeLayout']);

/**
 * 12-2 Laravel的模型使用
 */
Route::get('/product',[ProductController::class,'getProduct']);

